package array;

public class L55 {
    public boolean canJump(int[] nums) {
        int maxReachable = 0;
        for (int i = 0; i < nums.length; ++i) {
            // 如果当前位置大于目前能到达的最远位置，则无法继续前进
            if (i > maxReachable) {
                return false;
            }
            // 更新最远能到达的位置
            maxReachable = Math.max(maxReachable, i + nums[i]);
            // 如果最远能到达的位置已经覆盖了数组的最后一个位置，则可以到达终点
            if (maxReachable >= nums.length - 1) {
                return true;
            }
        }
        return true;
    }
    public static void main(String[] args) {

        L55 solution = new L55();
        int[] nums = {3, 2, 1, 0, 4};
        boolean canReachEnd = solution.canJump(nums);
        System.out.println(canReachEnd);
    }

}
